package com.ruoyi.store.mapper;

import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.store.domain.SysStore;
import com.ruoyi.store.domain.SysStoreListVO;
import com.ruoyi.store.domain.SysStorePackage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * 管理Mapper接口
 *
 * @author ruoyi
 * @date 2024-06-12
 */
@Mapper
public interface SysStoreMapper
{
    /**
     * 查询管理
     *
     * @param id 管理主键
     * @return 管理
     */
    public SysStore selectSysStoreById(Long id);

    /**
     * 查询管理列表
     *
     * @param sysStore 管理
     * @return 管理集合
     */
    public List<SysStore> selectSysStoreList(SysStore sysStore);

    /**
     * 新增管理
     *
     * @param sysStore 管理
     * @return 结果
     */
    public int insertSysStore(SysStore sysStore);

    /**
     * 修改管理
     *
     * @param sysStore 管理
     * @return 结果
     */
    public int updateSysStore(SysStore sysStore);

    /**
     * 删除管理
     *
     * @param id 管理主键
     * @return 结果
     */
    public int deleteSysStoreById(Long id);

    /**
     * 批量删除管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysStoreByIds(Long[] ids);

    List<SysStore> listByIds(@Param("ids") List<Long> ids);

    @Select("select package_id from sys_store_package where store_id = #{storeId}")
    List<Long> selectPackageIdsByStoreId(@Param("storeId") Long storeId);

//    @Select("select * from sys_store where dept_id =#{deptId}")
    List<SysStore> selectSysStoreByDeptId(@Param("deptId") Long deptId);


    List<SysStore> selectSysStoreByAgentId(@Param("agentId") Long agentId);

    void insertSysStorePackage(@Param("storePackages") List<SysStorePackage> storePackages);

    @Update("update sys_store set balance = TRUNCATE((balance-#{allAmount}),2) where (balance - #{allAmount}) >=0 and id = #{id};")
    int PayOrder(@Param("id") Long id, @Param("allAmount") BigDecimal allAmount);


    @Select("select id,name from sys_store where agent_id = #{agentId}")
    List<SysStoreListVO> selectSysStoreIdAndName(Long agentId);

    @Update("update sys_store set balance = TRUNCATE((balance+#{exchangeAmount}),2) where id = #{storeId}")
    int updateSysBalance(@Param("storeId") Long storeId, @Param("exchangeAmount")BigDecimal exchangeAmount);


    @Update("update sys_store set status = #{status} where id = #{storeId}")
    int updateSysStoreStatus(@Param("storeId") Long storeId, @Param("status")String status);
}
